import java.util.ArrayList;
import java.util.List;

/**
 * Created with IntelliJ IEDA.
 * Description:
 * User:86186
 * Date:2023-12-07
 * Time:22:57
 */

/**
 * 784. 字母大小写全排列
 * 给定一个字符串 s ，通过将字符串 s 中的每个字母转变大小写，我们可以获得一个新的字符串。
 * 返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。
 * 示例 1：
 * 输入：s = "a1b2"
 * 输出：["a1b2", "a1B2", "A1b2", "A1B2"]
 */
public class letterCasePermutation {
    StringBuffer path;
    List<String> ret;
    public List<String> letterCasePermutation(String s) {
        path = new StringBuffer();
        ret = new ArrayList<>();

        dfs(s,0);
        return ret;
    }

    public void dfs(String s, int pos) {
        if (pos ==  s.length()){
            ret.add(path.toString());
            return;
        }

        char ch = s.charAt(pos);
        // 不改变
        path.append(ch);
        dfs(s,pos + 1);
        path.deleteCharAt(path.length() - 1);//恢复现场

        if (ch < '0' || ch > '9'){
            char tmp = change(ch);
            path.append(tmp);
            dfs(s,pos + 1);
            path.deleteCharAt(path.length() - 1);//恢复现场
        }
    }

    public char change(char ch) {
        if (ch >= 'a' && ch <= 'z'){
            return ch -= 32;
        }else {
            return ch += 32;
        }
    }
}
